home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-09-22 | 6.2 KB | 249 lines |
- Dim DIT(3,7)
- Gosub INIT
- STP=10
- For FUMP=0 To 19
- F$="c4d:andifinal/Andi."+ Extension_8_0EB8(FUMP,4)
- Extension_8_0456 F$,9
- STP=64-(FUMP+12)*2
- Gosub REACHUNKY
- Gosub GREY
- Gosub WRITEBACK
- Next
- For FUMP=0 To 31
- F$="c4d:andifinal/Andi."+ Extension_8_0EB8(FUMP+2528,4)
- Extension_8_0456 F$,9
- STP=FUMP*2
- Gosub REACHUNKY
- Gosub GREYA
- Gosub WRITEBACK
- Next
- End
- WRITEBACK:
- ST=Start(9) : FLEN=Length(9)
- Open Out 1,F$
- Extension_8_17B6 1,ST To ST+12
- AD=ST+12
- Repeat
- SKIP=1
- ID$=Peek$(AD,4)
- LE=Leek(AD+4)
- If ID$="BMHD"
- Poke AD+8+10,0
- End If
- If ID$="CMAP"
- Print #1,ID$; Extension_8_08D2(64*3);
- For A=0 To 63
- Print #1,Chr$(Peek(CST+257+A*4));Chr$(Peek(CST+258+A*4));Chr$(Peek(CST+259+A*4));
- Next
- SKIP=0
- End If
- If ID$="BODY"
- Reserve As Work 12,GX*GY
- BMP=Start(12)
- For Y=0 To GY-1
- For P=0 To 7
- For X=0 To GX-1 Step 8
- B=0
- For XX=0 To 7
- Add B,B
- If Peek(CST+BMOF+Y*GX+X+XX) and Extension_8_04F8(P)
- Inc B
- End If
- Next
- Poke BMP,B : Inc BMP
- Next
- Next
- Next
- Print #1,ID$; Extension_8_08D2(GX*GY);
- Extension_8_17B6 1,Start(12) To BMP
- SKIP=0
- End If
- If LE and 1 Then Inc LE
- If SKIP Then Extension_8_17B6 1,AD To AD+8+LE
- Add AD,8+LE
- Until AD=ST+FLEN
- NLEN=Pof(1)
- Pof(1)=4
- Print #1, Extension_8_08D2(NLEN-8);
- Close 1
- Return
- INIT:
- Restore DITHER
- For Y=0 To 7
- For X=0 To 3
- Read DIT(X,Y)
- Next
- Next
- Return
- GREY:
- Screen Open 0,GX,GY,32,0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- For A=0 To 31
- Colour A, Extension_8_0A0E((A/8)*5,((A/2) mod 4)*5,(A and 1)*15)
- Next
- ' For A=0 To 15
- ' Colour A,A*$111
- ' Next
- AD=CST+BMOF
- For Y=0 To GY-1
- RR=Peek(CST+257)
- GG=Peek(CST+258)
- BB=Peek(CST+259)
- For X=0 To GX-1
- C=Peek(AD+X+Y*GX)
- ' If C<64
- ' RR=Peek(CST+257+C*4)
- ' GG=Peek(CST+258+C*4)
- ' BB=Peek(CST+259+C*4)
- ' End If
- If C>63 and C<128 Then BB=(C-64)*4 : Poke AD+X+Y*GX,Max(C-STP,64)
- If C>127 and C<192 Then RR=(C-128)*4 : Poke AD+X+Y*GX,Max(C-STP,128)
- If C>191 Then GG=(C-192)*4 : Poke AD+X+Y*GX,Max(C-STP,192)
- ' DR=DIT(X and 3,Y and 3)*2
- ' DG=DIT((X+1) and 3,(Y+3) and 3)*2
- ' DB=DIT((X+2) and 3,((Y+1) and 3)+4)*4
- ' CC=Glue Colour(Min((RR+DR)/16,15),Min((GG+DG)/16,15),Min((BB+DB)/16,15))
- ' Turbo Plot X,Y,Best Pen(CC)
- ' Turbo Plot X,Y,Min((RR+GG+BB+DIT(X and 3,Y and 3)*3)/48,15)
- Next
- Next
- For C=0 To 63
- Poke CST+257+C*4,Max(Peek(CST+257+C*4)-STP*4,0)
- Poke CST+258+C*4,Max(Peek(CST+258+C*4)-STP*4,0)
- Poke CST+259+C*4,Max(Peek(CST+259+C*4)-STP*4,0)
- Next
- Return
- GREYA:
- Screen Open 0,GX,GY,32,0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- For A=0 To 31
- Colour A, Extension_8_0A0E((A/8)*5,((A/2) mod 4)*5,(A and 1)*15)
- Next
- ' For A=0 To 15
- ' Colour A,A*$111
- ' Next
- AD=CST+BMOF
- For Y=0 To GY-1
- RR=Peek(CST+257)
- GG=Peek(CST+258)
- BB=Peek(CST+259)
- For X=0 To GX-1
- C=Peek(AD+X+Y*GX)
- If C<64
- RR=Peek(CST+257+C*4)
- GG=Peek(CST+258+C*4)
- BB=Peek(CST+259+C*4)
- End If
- If C>63 and C<128 Then BB=(C-64)*4 : Poke AD+X+Y*GX,Min(C+STP,127)
- If C>127 and C<192 Then RR=(C-128)*4 : Poke AD+X+Y*GX,Min(C+STP,191)
- If C>191 Then GG=(C-192)*4 : Poke AD+X+Y*GX,Min(C+STP,255)
- DR=DIT(X and 3,Y and 3)*2
- DG=DIT((X+1) and 3,(Y+3) and 3)*2
- DB=DIT((X+2) and 3,((Y+1) and 3)+4)*4
- CC= Extension_8_0A0E(Min((RR+DR)/16,15),Min((GG+DG)/16,15),Min((BB+DB)/16,15))
- Extension_8_0388 X,Y, Extension_8_1504(CC)
- ' Turbo Plot X,Y,Min((RR+GG+BB+DIT(X and 3,Y and 3)*3)/48,15)
- Next
- Next
- For C=0 To 63
- Poke CST+257+C*4,Min(Peek(CST+257+C*4)+STP*4,255)
- Poke CST+258+C*4,Min(Peek(CST+258+C*4)+STP*4,255)
- Poke CST+259+C*4,Min(Peek(CST+259+C*4)+STP*4,255)
- Next
- Return
- REACHUNKY:
- ST=Start(9) : LE=Length(9)
- If Leek(ST)<> Extension_8_0998("FORM") Then Stop
- If Leek(ST+8)<> Extension_8_0998("ILBM") Then Stop
- If Leek(ST+4)+8<>LE Then Stop
- AD=ST+12
- Repeat
- LCH=Leek(AD+4)
- CHNK=Leek(AD)
- If CHNK= Extension_8_0998("BMHD")
- GX=Deek(AD+8)
- GY=Deek(AD+10)
- PL=Peek(AD+16)
- PK=Peek(AD+18)
- SX=Deek(AD+24)
- SY=Deek(AD+26)
- Reserve As Work 11,GX*GY+256+256*4+256*4
- CST=Start(11) : BMOF=256*9
- Doke CST,GX : Doke CST+2,GY
- Doke CST+4,PL
- Reserve As Work 10,4096
- TST=Start(10)
- End If
- ' If CHNK=Asc.l("CAMG")
- ' CAMG=Leek(AD+8)
- ' Print Hex$(CAMG,8)
- ' Loke CST+8,CAMG
- ' End If
- If CHNK= Extension_8_0998("CMAP")
- For A=0 To(LCH/3)-1
- RED=Peek(AD+8+A*3)
- GRN=Peek(AD+9+A*3)
- BLU=Peek(AD+10+A*3)
- Poke CST+257+A*4,RED
- Poke CST+258+A*4,GRN
- Poke CST+259+A*4,BLU
- Next
- End If
- If CHNK= Extension_8_0998("BODY")
- X=0 : Y=0 : P=0 : PP=1
- If PK
- POS=AD+8
- Repeat
- CON=Peek(POS) : Inc POS
- If CON<128
- For A=0 To CON
- B=Peek(POS) : Gosub BYTEPUT
- Inc POS
- Next
- End If
- If CON>128
- B=Peek(POS) : Inc POS
- For A=0 To 256-CON
- Gosub BYTEPUT
- Next
- End If
- Until POS=>AD+8+LCH
- If Y<>SY : FAIL=1 : End If
- Else
- For A=0 To LCH-1
- B=Peek(AD+8+A)
- Gosub BYTEPUT
- Next
- End If
- End If
- If LCH and 1 Then Inc AD
- Add AD,LCH+8
- Until AD=>ST+LE
- Return
- BYTEPUT:
- If Y=>GY Then FAIL=1 : Y=0
- Poke TST,B : Inc TST
- Add X,8 : If(X and $FFF8)=>GX Then Inc P : X=0 : TST=Start(10)+P*512
- If P=>PL
- AA=CST+BMOF+Y*GX
- TST=Start(10)
- For X=0 To(GX/8)-1
- P2C[TST+X,AA+X*8]
- Next
- X=0 : Inc Y : P=0 : PP=1
- End If
- Return
- DITHER:
- Data $0,$8,$2,$A
- Data $C,$4,$E,$6
- Data $3,$B,$1,$9
- Data $E,$7,$D,$5
-
- Data $5,$C,$E,$3
- Data $8,$0,$6,$A
- Data $D,$2,$4,$E
- Data $7,$B,$9,$1
-
- Procedure P2C[PLBUF,CHKBUF]
- ' COMPILED PROCEDURE -- can't convert this to AMOS code
- End Proc